/**
 * 24.	某个模板的一个实例的数据源基类 ItemDS
 */
if(typeof (module) !="undefined"){
    module.exports = FGradient; //

    var FEffectBase = require('./FEffectBase');
    var FColorBase = require('./FColorBase');
    var FColor = require('./FColor');
    var FColorConverter = require('./FColorConverter');
    var FMatrix = require('../common/FMatrix');
}



function FGradient()
{
    FColorBase.call(this);
    this.type = FEffectBase.prototype.TYPE_GRADIENT;

    // 类型
    this.line = true; // true表示线性渐变，false表示圆形渐变
    this.w = 0; // 宽度
    this.h = 0; // 宽度
    this.r=0;// 旋转角度(单位弧度)
    this.tx=0; // 偏移x
    this.ty=0; // 偏移y
    this.colors= new Array(); // stop的颜色的FColor对象数组
    this.alphas= new Array(); // stop的透明度，范围[0，1]，例如：两个stop[1, 0.5];
    this.ratios= new Array(); // stop的位置，范围[0x0,0xFF]，例如：两个stop[0x0, 0xFF];

}
FGradient.prototype = new FColorBase();


// 从json对象(注意不是json字符串)中解析
FGradient.prototype.fromJson = function(jsonObj, versionId){
    FColorBase.prototype.fromJson.call(this,jsonObj,versionId);

    this.line = jsonObj.line;
    this.w = jsonObj.w;
    this.h= jsonObj.h;
    this.r= jsonObj.r;
    this.tx= jsonObj.tx;
    this.ty= jsonObj.ty;
    for(var i=0; i<jsonObj.colors.length; i++){
        var clr = new FColor();
        clr.fromJson(jsonObj.colors[i], versionId);
        this.colors.push(clr);
    }
    this.alphas= jsonObj.alphas;
    this.ratios= jsonObj.ratios;
}
// 转换成json字符串
FGradient.prototype.toJson = function(){
    // 去掉父json字符串的头尾
    var superJson = FColorBase.prototype.toJson.call(this);
    superJson = superJson.substr(1,superJson.length-2);

    var ret = '{';
    ret +=superJson;

    // line
    ret +=',';
    ret += '"line":';
    ret += this.line;

    // w
    ret +=',';
    ret += '"w":';
    ret += this.w;
    // h
    ret +=',';
    ret += '"h":';
    ret += this.h;
    // r
    ret +=',';
    ret += '"r":';
    ret += this.r;
    // tx
    ret +=',';
    ret += '"tx":';
    ret += this.tx;
    // ty
    ret +=',';
    ret += '"ty":';
    ret += this.ty;
    //colors
    ret +=',';
    ret += '"colors":[';
    for(var i=0; i<this.colors.length; i++){
        if(i>0)	ret +=',';
        ret += this.colors[i].toJson();
    }
    ret += ']';

    //alphas
    ret +=',';
    ret += '"alphas":[';
    for(var i=0; i<this.alphas.length; i++){
        if(i>0)	ret +=',';
        ret += this.alphas[i];
    }
    ret += ']';
    //ratios
    ret +=',';
    ret += '"ratios":[';
    for(var i=0; i<this.ratios.length; i++){
        if(i>0)	ret +=',';
        ret += this.ratios[i];
    }
    ret += ']';


    ret+='}';
    return ret;
}

// 取得给PDFkit用的渐变的参数
// 如果是线性渐变，则返回：(x1, y1, x2, y2) - x1,y1 is the start point, x2,y2 is the end point
// 如果是圆形渐变，则返回：(x1, y2, r1, x2, y2, r2) - r1 is the inner radius, r2 is the outer radius
FGradient.prototype.PDFKitGradientParas = function(){
    if(this.line){
        //方法：对象轮廓在某个角度上（r大于0为逆时针）的投影的线段，就是渐变矩形所在的线段。


        //1.先将中心点平移至坐标原点 2.做旋转变换3.再将中心点平移回原位置
        //旋转方式都是按照中心点旋转
        var a = this.w/ 2;var b = this.h/2;
        var T0 = FMatrix.prototype.initRotateMatrix(this.r,a,b);
        var T1 = T0.multiplyPoint(this.tx,this.ty);
        var T2 = T0.multiplyPoint(this.tx+this.w,this.ty);
        return [T1[0],T1[1],T2[0],T2[1]];

    }else{
        return [this.tx+this.w/2,this.ty+this.h/2, 0,this.tx+this.w/2, this.ty+this.h/2, this.w/2];

    }
}
